/**
* @Title: DiscardServer.java
* @Package com.an.discardserver
* @Description: TODO(用一句话描述该文件做什么)
* @author antch,861710865@qq.com
* @date 2017年7月20日 上午11:06:47
* @version V1.0
*/


package com.an.discardserver;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
* @ClassName: DiscardServer
* @Description: TODO(启动DiscardServerHandler类)
* @author antch,861710865@qq.com
* @date 2017年7月20日 上午11:06:47
*
*/
/*
 * 丢弃任何进入的数据
 */
public class DiscardServer {

	/**
	 * 端口
	 */
	private int port;


	public DiscardServer(int port) {
		super();
		this.port = port;
	}

	public void run() throws InterruptedException {
		/*
		 * NioEventLoopGroup处理I/O操作的多线程事件循环器
		 */
		//用来接收进来的连接
		EventLoopGroup boosGroup = new NioEventLoopGroup();
		//用来处理已经被接收的连接，一旦被boss接收到，就会把连接信息注册到worker上。
		EventLoopGroup workerGroup = new NioEventLoopGroup();

		//启动NIO服务的辅助启动类
		//ChannelInitializer是一个特殊的处理类，目的帮助使用者配置一个新的Channel
		ServerBootstrap b = new ServerBootstrap();
		b.group(boosGroup,workerGroup)
		.channel(NioServerSocketChannel.class)
		.childHandler(new ChannelInitializer<SocketChannel>() {

			@Override
			protected void initChannel(SocketChannel ch) throws Exception {
				// TODO Auto-generated method stub
				ch.pipeline().addLast(new DiscardServerHandler());
			}
		})
		.option(ChannelOption.SO_BACKLOG,128)//链接缓存池设置
		.childOption(ChannelOption.SO_KEEPALIVE, true);

		//绑定端口，开始接收进来的连接
		ChannelFuture f = b.bind(port).sync();
		System.out.println("*****" + "服务器启动成功" + "*****");

		//等待服务器Socket关闭
		//在这个例子中，这个不会发生，但你可以优雅的关闭你的服务器。
		f.channel().closeFuture().sync();

		workerGroup.shutdownGracefully();
		boosGroup.shutdownGracefully();
	}

	/**
	* @Title: main
	* @Description: TODO(这里用一句话描述这个方法的作用)
	* @param @param args    设定文件
	* @return void    返回类型
	* @throws
	*/

	public static void main(String[] args) {
		// TODO  运行服务器
		int port = 8080;
		try {
			System.out.println("*****" + "服务器启动中" + "*****");
			new DiscardServer(port).run();
		} catch (InterruptedException e) {
			// TODO 打印异常信息
			e.printStackTrace();
			System.out.println("*****" + "服务器启动失败" + "*****");
		}

	}

}
